package server.domain;

import java.io.IOException;

import server.persistence.FilePersistenceManager;
import server.persistence.PersistenceManager;
import shop.exceptions.ArtikelExistiertBereitsException;
import shop.exceptions.ArtikelExistiertNichtException;
import shop.local.valueobjects.Artikel;
import shop.local.valueobjects.ArtikelListe;


public class ArtikelVerwaltung {

	private ArtikelListe artikelBestand = new ArtikelListe();

	private PersistenceManager pm = new FilePersistenceManager();
	
	public void liesDaten(String datei) throws IOException {
		pm.openForReading(datei);

		Artikel einArtikel;
		do {
			einArtikel = pm.ladeArtikel();
			if (einArtikel != null) {
				try {
					einfuegen(einArtikel);
				} catch (ArtikelExistiertBereitsException e1) {
				}
			}
		} while (einArtikel != null);

		pm.close();
	}

	public void schreibeDaten(String datei) throws IOException  {

		pm.openForWriting(datei);

		ArtikelListe liste = artikelBestand;
		
		
		for (int i = 0; i <= liste.size(); i++) {
			Artikel a = liste.get(i);
			if (a != null) {
				pm.speichereArtikel(a);
			}
		}
		
		// Alte Schreibemethode ohne Hashmaps
		/*while (liste != null) {
			Artikel a = liste.gibErstenArtikel();
			if (a != null) {
				pm.speichereArtikel(a);
			}
			liste = liste.gibRestlicheArtikel();
		}*/
		
		pm.close();

	}

	
	public void einfuegen(Artikel einArtikel) throws ArtikelExistiertBereitsException {
		artikelBestand.einfuegen(einArtikel);
	}
	
	public void setzeListe(ArtikelListe liste) {
		this.artikelBestand = liste;
	}
	
	public ArtikelListe sucheArtikel(String titel) {
		ArtikelListe suchErg = new ArtikelListe();
		//ArtikelListe aktArtikelListenElt = artikelBestand;

		for (int i = 1; i <= artikelBestand.size(); i++) {
			
			// 
			String artikelNameSystem = artikelBestand.get(i).getTitel().toLowerCase();
			if (artikelNameSystem.contains(titel.toLowerCase())) {
				try {
					suchErg.einfuegen(artikelBestand.get(i));
				} catch (ArtikelExistiertBereitsException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			
		}
		
		// Alte Artikellistensuche
		/*while (aktArtikelListenElt != null) {
			Artikel aktArtikel = aktArtikelListenElt.gibErstenArtikel(); 
			if (aktArtikel.getTitel().toLowerCase().contains(titel.toLowerCase())) {
				try {
					suchErg.einfuegen(aktArtikel);
				} catch (ArtikelExistiertBereitsException e) {
				}
			}
			aktArtikelListenElt = aktArtikelListenElt.gibRestlicheArtikel();
		}*/
		
		return suchErg;
	}
	
	
	public ArtikelListe sucheArtikelNummer(int aNr) {
		ArtikelListe suchErg = new ArtikelListe();
		//ArtikelListe aktArtikelListenElt = artikelBestand;

		for (int i = 1; i <= artikelBestand.size(); i++) {
			
			// 
			int artikelNummerSystem = artikelBestand.get(i).getNummer();
			if (artikelNummerSystem == aNr) {
				try {
					suchErg.einfuegen(artikelBestand.get(i));
				} catch (ArtikelExistiertBereitsException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			
		}
		return suchErg;
	}
	
	public ArtikelListe getArtikelBestand() {
		return artikelBestand;
	}
	
	public boolean loeschen(int artNr) {
		boolean geloescht = false;
		try {
			geloescht = artikelBestand.loeschen(artNr);
		} catch (ArtikelExistiertNichtException e) {}
		return geloescht;
	}
	
	public boolean bestand(int artNr, int artBes) {
		boolean geaendert = false;
		try {
			artikelBestand.gibArtikel(artNr).setBestand(artBes);
			if (artikelBestand.gibArtikel(artNr).getBestand() == artBes) {
				geaendert = true;
			}
		} catch (ArtikelExistiertNichtException e) {}
		return geaendert;
	}
}
